/**
 * @description 业务层 用户处理的方法这里只是写对应的查询操作， 不做业务的处理
 * @author 宫彦胜
 */

 const { User } = require('../db/model')
 const { formatUser } = require('./_format')
 
 
 /**
  * 如果只是传入账号就事检测账号， 如果传入密码就是检测是否登录成功了
  * @param {string} userName 账号
  * @param {string} password 密码
  * @returns 
  */
 async function getUserInfo(userName,password){
   // 定义一个查询条件对象
   const whereOpt = {
     userName
   }
   // 如果有password 就代表是要登录
   if(password){
     Object.assign(whereOpt, {password})
   }
   const user = await User.findOne({
     where: whereOpt,
     attributes: ['id', 'userName', 'nickName', 'gender', 'city', 'picture']
   })
   if(user === null){
     return null
   }
 
   // 来格式化一下用户数据
   return formatUser(user)
 }
 
 /**
  * @description 创建用户信息
  * @param {string} userName 用户名
  * @param {string} password 密码
  * @param {number} gender 性别(1男,2女,3保密)
  * @param {string} nickName 昵称
  */
 async function createUser({ userName, password, gender=3, nickName }){
   const result = await User.create({
     userName,
     password,
     gender,
     nickName: nickName || userName
   })
   // 返回用户， 创建的用户信息
   return result
 }
 
 /**
  * 删除用户
  * @param {string} userName 用户名
  */
 async function deleteUser(userName){
   // destroy 返回的是删除的条数
   const res = await User.destroy({
     where: {
       userName
     }
   })
   return res > 0
 }
 
 /**
  * 修改user 数据
  * @param {object} newNickName, newCity, newPicture, newPassword 
  * @param {object } userName, password  
  */
 async function updateUser({ newNickName, newCity, newPicture, newPassword },{ userName, password }){
   // 修改的信息
   const updateInfo = {}
   // 修改的条件
   const whereOpt = {}
   if(newNickName){
     updateInfo.nickName = newNickName
   }
   if(newCity){
     updateInfo.city = newNickName
   }
   if(newPicture){
     updateInfo.picture = newPicture
   }
   if(newPassword){
     updateInfo.password = newPassword
   }
   // where 修改条件
   if(userName){
     whereOpt.userName = userName
   }
   if(password){
     whereOpt.password = password
   }
   const res = await User.update(updateInfo, {
     where: whereOpt
   })
 
   return res[0] > 0
   
 
 }
 
 module.exports = {
   createUser,
   getUserInfo,
   deleteUser,
   updateUser
 }
 